home *** CD-ROM | disk | FTP | other *** search
- {
- > but you can use Pascal to do things like this:
- }
- program SinusScroll;
- const
- GSeg = $a000;
- Sofs = 140; Samp = 40; Slen = 255;
- Size = 2; Curve = 3;
- Xmax = 279 div Size; Ymax = 7;
- ScrSpd = -1;
- ScrText : string =
- ' Hai world... This looks a bit like the scroll of the second part'+
- ' of Future Crew''s Unreal demo (part one)... It''s not filled'+
- ' but it sure looks nicer (imho)... ';
- type SinArray = array[0..Slen] of word;
- var Stab : SinArray; Fseg,Fofs : word;
-
- procedure CalcSinus; var I : word; begin
- for I := 0 to Slen do Stab[I] := round(sin(I*4*pi/Slen)*Samp)+Sofs; end;
-
- procedure GetFont; assembler; asm
- mov ax,1130h; mov bh,1; int 10h; mov Fseg,es; mov Fofs,bp; end;
-
- procedure SetGraphics(Mode : word); assembler; asm
- mov ax,Mode; int 10h end;
-
- function keypressed : boolean; assembler; asm
- mov ah,0bh; int 21h; and al,0feh; end;
-
- procedure Scroll;
- type
- ScrArray = array[0..Xmax,0..Ymax] of byte;
- PosArray = array[0..Xmax,0..Ymax] of word;
- var
- PosTab : PosArray;
- BitMap : ScrArray;
- X,I,SinIdx : word;
- Y,ScrIdx,CurChar : byte;
- begin
- fillchar(BitMap,sizeof(BitMap),0);
- fillchar(PosTab,sizeof(PosTab),0);
- ScrIdx := 1; SinIdx := 0;
- repeat
- Curchar := ord(ScrText[ScrIdx]);
- inc(ScrIdx); if ScrIdx = length(ScrText) then ScrIdx := 1;
- for I := 0 to 7 do begin
- move(BitMap[1,0],BitMap[0,0],(Ymax+1)*Xmax);
- for Y := 0 to Ymax do
- if ((mem[Fseg:Fofs+8*CurChar+Y] shl I) and 128) <> 0 then
- BitMap[Xmax,Y] := ((ScrIdx+Y-I) mod 70)+32 else BitMap[Xmax,Y] := 0;
- while (port[$3da] and 8) <> 0 do;
- while (port[$3da] and 8) = 0 do;
- for X := 0 to Xmax do
- for Y := 0 to Ymax do begin
- mem[GSeg:PosTab[X,Y]] := 0;
- PosTab[X,Y] := (Size*Y+STab[(SinIdx+X+Curve*Y) mod
- SLen])*320+Size*X+STab[(X+Y) mod SLen]-SOfs;
- mem[GSeg:PosTab[X,Y]] := BitMap[X,Y];
- end;
- SinIdx := (SinIdx+ScrSpd) mod SLen;
- end;
- until keypressed;
- end;
-
- begin
- CalcSinus;
- GetFont;
- SetGraphics($13);
- Scroll;
- SetGraphics(3);
- end.
-
- { --- and again --- }
-
- The prior 'release' was a bit buggy indeed (as I expected). So here's a
- better working version. It's smaller too. Not only thanx to the
- variable-size. Have fun!
-
- Btw: 'keypressed' was taken from Sean Palmers' GhostEd. The rest, of course,
- by me! ;-)